*********************************************************
*														*
*	Kodierung der GLES Missing Values in Stata			*
*														*
*********************************************************
/*
	Seit 2013 sind die Missing Values in allen Studien der GLES
	nach einem einheitlichen Schema codiert, das auf den Seiten
	der GLES (https://www.gesis.org/gles/daten-und-dokumentation) 
	heruntergeladen werden kann.
	
	Das vorliegende Do-File rekodiert die GLES Missing Values -99 bis -71 in das Stata
	Format (.a, .b, ...) bei numerischen Variablen. String-Variablen werden auf 
	Systemmissing gesetzt.
	
	Bei Fragen oder Problemen wenden Sie sich gerne an gles@gesis.org 
   
	GESIS, Januar 2022
*/
 
*********************************************************
	clear
	set more off 
 
*** Verzeichnis festlegen
	cd "C:\Users\...\replication_for upload\analysis for 2025"

*** Datensatz laden
	use ZA10101_v1-0-0.dta

*********************************************************

*** GLES Missing Values in Stata Missing Values (.a - .r) rekodieren

	foreach var of varlist _all {
		capture confirm numeric var `var'
		if !_rc {
		    /* Fuer numerische Variablen ausführen. */
			qui mvdecode `var', mv(-71=.q \-72=.p \-73=.r \-81=.o ///
							\-82=.n \-83=.m \-84=.l \-85=.k ///
							\-86=.j \-91=.i \-92=.h \-93=.g ///
							\-94=.f \-95=.e \-96=.d \-97=.c ///
							\-98=.b \-99=.a)
			local lab: value label `var'
			if "`lab'"!="" {
				label define `lab' ///
				.a "keine Angabe" ///
				.b "weiss nicht" ///
				.c "trifft nicht zu" ///
				.d "Split" ///
				.e "nicht teilgenommen" ///
				.f "nicht in Auswahlgesamtheit" ///
				.g "Interview abgebrochen" ///
				.h "Fehler in Daten" ///
				.i "Modus" ///
				.j "nicht wahlberechtigt" ///
				.k "nicht waehlen" ///
				.l "keine Erst-/Zweitstimme abgeben" ///
				.m "ungueltig waehlen" ///
				.n "keine andere Partei waehlen" ///
				.o "noch nicht entschieden" ///
				.p "nicht einzuschaetzen" ///
				.q "nicht bekannt" ///
				.r "Mehrfachnennungen", modify nofix
				}
			}
	}

	
* dependent variable: vote choice
tab pre012ba

tab pre012ba, nol

gen spd_wahl = 0
replace spd_wahl = 1 if pre012ba==4

gen afd_wahl = 0
replace afd_wahl = 1 if pre012ba==322

gen union_wahl = 0
replace union_wahl = 1 if pre012ba==1

gen gru_wahl = 0
replace gru_wahl = 1 if pre012ba==6


* workers

tab sup026
tab sup026, nol

gen arbeiter = 0
replace arbeiter = 1 if sup026==11 | sup026==12 | sup026==13 

gen meister = 0
replace meister = 1 if sup026 == 21

gen angestellte_einfach = 0
replace angestellte_einfach=1 if sup026==22

* labour union member

tab sup080a

tab sup080a, nol

gen gewerkschaftsmitglied = 0
replace gewerkschaftsmitglied=1 if sup081 < 4

* party identification

tab pre072a
tab pre072a, nol

gen spd_pi = 0
replace spd_pi = 1 if pre072a == 4

gen afd_pi = 0
replace afd_pi = 1 if pre072a==322


gen union_pi = 0
replace union_pi = 1 if pre072a==1


* valence issues

tab pre021a
tab pre021a, nol

gen spd_valenz = 0
replace spd_valenz = 1 if pre021a==4

gen afd_valenz = 0
replace afd_valenz = 1 if pre021a==322

gen union_valenz = 0
replace union_valenz = 1 if pre021a==1

* chancellor preference

tab pre045

tab pre045, nol

gen scholz = 0
replace scholz = 1 if pre045==1

gen merz=0
replace merz=1 if pre045==2

gen weidel=0
replace weidel=1 if pre045==4

gen habeck=0
replace habeck=1 if pre045==3

* ideological distance
* taxes
tab pre029
gen disteco_spd = abs(pre028d-pre029)
gen disteco_afd = abs(pre028h-pre029)
* migration
gen distimm_spd = abs(pre031d-pre032)
gen distimm_afd = abs(pre031h-pre032)
* climate change
gen distklima_spd = abs(pre035d-pre037)
gen distklima_afd = abs(pre035h-pre037)


* wohnort urban-rural

rename sup003 urbanrural

* federal state

rename sup004 Bundesland
tab Bundesland

* Trust Bundestag 
tab sup017b
rename sup017b vertrauen_bundestag

* religios denomination

rename sup076 konfession

* church attendance

tab sup077
rename sup077 gottesdiensthäufigkeit

tab gottesdiensthäufigkeit
tab gottesdiensthäufigkeit, nol mis


gen gottesdienst_häufig = 0
replace gottesdienst_häufig = 1 if gottesdiensthäufigkeit>3

tab gottesdienst_häufig gottesdiensthäufigkeit


* gender

tab pre001
rename pre001 geschlecht

* education

rename pre003 bildung
tab bildung
tab bildung, nol
gen abitur=0
replace abitur=1 if bildung==5

* born in east Germany
tab sup011, nol
gen born_eastgermany = 0
replace born_eastgermany = 1 if sup011==4 | sup011==8 | sup011==13 | sup011==14 | sup011==16 | sup011==17

tab pre002a, nol
replace pre002a="" if pre002a=="1935 und frueher" 
destring pre002a, replace

* age

gen alter = 2025-pre002a

tab konfession
tab konfession, nol

* Interaktion religious denomination - Church attendance

gen rk_kirchgang_oft = 0
replace rk_kirchgang_oft = 1 if konfession==3 & gottesdienst_häufig==1
gen rk_kirchgang_selten = 0
replace rk_kirchgang_selten = 1 if konfession==3 & gottesdienst_häufig==0 

gen ev_kirchgang_oft = 0
replace ev_kirchgang_oft = 1 if konfession==1 & gottesdienst_häufig==1
gen ev_kirchgang_selten = 0
replace ev_kirchgang_selten = 1 if konfession==1 & gottesdienst_häufig==0 

gen fev_kirchgang_oft = 0
replace fev_kirchgang_oft = 1 if konfession==2 & gottesdienst_häufig==1
gen fev_kirchgang_selten = 0
replace fev_kirchgang_selten = 1 if konfession==2 & gottesdienst_häufig==0 

gen oB_kirchgang_oft = 0
replace oB_kirchgang_oft = 1 if konfession==9 & gottesdienst_häufig==1
gen oB_kirchgang_selten = 0
replace oB_kirchgang_selten = 1 if konfession==9 & gottesdienst_häufig==0 


gen konfession_kirchgang = 0
replace konfession_kirchgang = 1 if rk_kirchgang_oft==1
replace konfession_kirchgang = 2 if rk_kirchgang_selten==1
replace konfession_kirchgang = 3 if ev_kirchgang_oft==1
replace konfession_kirchgang = 4 if ev_kirchgang_selten==1
replace konfession_kirchgang = 5 if fev_kirchgang_oft==1
replace konfession_kirchgang = 6 if fev_kirchgang_selten==1
replace konfession_kirchgang = 7 if oB_kirchgang_oft==1
replace konfession_kirchgang = 8 if oB_kirchgang_selten==1


exit

* analyse

eststo clear

*** Table A3, Figures 7/8/9/10

* Union; für diese Analyse: recode durchführen

* Model 1
recode konfession (4=9) (9=4)


eststo: logit union_wahl i.konfession i.geschlecht alter

margins, at(konfession=(1 2 3 4)) 
marginsplot, level(95) x(konfession) recast(line) xlabel(1 2 3 4)  

* Model 2
recode konfession (4=9) (9=4)

eststo: logit union_wahl i.konfession_kirchgang i.geschlecht alter

margins, at(konfession_kirchgang=(1 2 3 4 5 6 7)) 
marginsplot, level(95) x(konfession_kirchgang) recast(line) xlabel(1 2 3 4 5 6 7)  

* Greens
* MOdel 3
recode konfession (4=9) (9=4)

eststo: logit gru_wahl i.konfession i.geschlecht alter

margins, at(konfession=(1 2 3 4)) 
marginsplot, level(95) x(konfession) recast(line) xlabel(1 2 3 4)  

* Model 4
recode konfession (4=9) (9=4)

eststo: logit gru_wahl i.konfession_kirchgang i.geschlecht alter

margins, at(konfession_kirchgang=(1 2 3 4 5 6 7)) 
marginsplot, level(95) x(konfession_kirchgang) recast(line) xlabel(1 2 3 4 5 6 7)  

* AfD
* Model 5
recode konfession (4=9) (9=4)

eststo: logit afd_wahl i.konfession i.geschlecht alter

margins, at(konfession=(1 2 3 4 )) 
marginsplot, level(95) x(konfession) recast(line) xlabel(1 2 3 4)  

* Model 6
recode konfession (4=9) (9=4)

eststo: logit afd_wahl i.konfession_kirchgang i.geschlecht alter

margins, at(konfession_kirchgang=(1 2 3 4 5 6 7)) 
marginsplot, level(95) x(konfession_kirchgang) recast(line) xlabel(1 2 3 4 5 6 7)  


esttab using "C:\Users\...\replication_for upload\analysis for 2025\model2025_union_greens_afd.rtf" , replace ///
	abs b(3) se(3) ///
	star(+ 0.10 * 0.05 ** 0.01) ///
	aic ///
	scalars("ll Log pseudolikelihood") ///
	nonumbers /// 
	coeflabels(_cons "Constant" ///
	geschlecht "Female" ///
	born_eastgermany "Born in East Germany" ///
	alter "Age") ///
	nonotes addnotes("Note: Numbers in parentheses are standard errors. Significance levels: + = p < 0.1; * = p < 0.05; ** = p < 0.01.") 

